Сектор клієнтської розробки SYNRC CHAT відкриває серію статей
присвячених розробці на Swift. Якшо коротко то спочатку ми будемо
вчитися працювати з бінарними форматами ASN.1 DER використовуючи
бібліотеки Apple. А потім напишемо ASN.1 компілятор з кодогенерацією
в Swift 5.8 по ASN.1 специфікаціям які входять до складу SYNRC CA,
ключового криптографічного компоненту та головної залежності SYNRC CHAT.
Для початку ми бачимо клієнт CHAT X.509 як read-eval-print цикл як такий,
що можна побачити в самому Swift, Elixir та майже кожній
сучасній мові програмування. Поки що питання текстового протоколу оператора
консолі залищається відкритим, одна уже можна задекларувати принципи на
яких буде побудована UTF-8 консоль: перший — це termio інтерфейс
і другий — це своя мова і протокол спілкування виконаний у вигляді REPL.
Створення проєкту
Покажемо необхідний мінімум для створення проєету. По-перше треба зробити
файл проекту Package.swift. Зверніть увагу на версію Swift в коментарі першого рядка.
Всі таргети повинні відповідати папкам та зазвичай знаходяться в папці Sources.
Цей додаток використовує тільки дві залежності swift-asn1 і swift-crypto,
всі реалізації обгорток в swift-certificates я переніс в папку CMS. Зверніть
увагу що там вони використвують внутрішній таргет _CryptoExtras з залежності swift-crypto.
Також хочеться додати шо можна було би не красти файли з swift-certificates,
а просто поставити її в залежність тоді треба було би робити @testable import X509,
але чомусь це забороняє створювати релізи swift build -c release. Не тільки це стало
причиною переносу файлів з swift-certificates — оскільки ми хочемо
аби всі обгортки X509 які зараз лежать в swift-certificates в майбутньому
були замінені на результати роботи SYNRC ASN.1 компілятора, ми навмисно
не включаємо бібіліотеку в залежності аби поступово замінювати файли що там
знаходяться на згенеровані сумісні версії.
REPL
Наступним кроком підготуємо головну програму яка компілюється в
бінарний файл chat-x509 на всіх платформах: Windows, Linux, Mac.
Підтримка DER пакетів
Покажемо на прикладі як використовувати X509 обгортки з Apple бібліотеки
swift-certificates, для цього в репозиторії закомічено 3
файли: cms.bin (CMS), ca.crt (CRT), ec_sha256.der (CSR). Для відображення
розпарсаної інформації з цих файлів в клієнті використовується
наприклад наступна команда: show ca.crt crt, де другий параметр show
crt показує тип структури, а перший — ім'я файла де знаходиться структура.